package cn.wolfcode.custom.service.impl;

import java.util.List;

import cn.wolfcode.common.constant.AuditConstants;
import cn.wolfcode.common.constant.BusinessConstants;
import cn.wolfcode.common.utils.DateUtils;
import cn.wolfcode.common.utils.SecurityUtils;
import cn.wolfcode.custom.dto.ContractDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.wolfcode.custom.mapper.ContractMapper;
import cn.wolfcode.custom.domain.Contract;
import cn.wolfcode.custom.service.IContractService;
import org.springframework.util.Assert;

/**
 * 合同信息Service业务层处理
 * 
 * @author zhangyf
 * @date 2023-05-03
 */
@Service
public class ContractServiceImpl implements IContractService 
{
    @Autowired
    private ContractMapper contractMapper;

    /**
     * 查询合同信息
     * 
     * @param id 合同信息主键
     * @return 合同信息
     */
    @Override
    public Contract selectContractById(Long id)
    {
        return contractMapper.selectContractById(id);
    }

    /**
     * 查询合同信息列表
     * 
     * @param contract 合同信息
     * @return 合同信息
     */
    @Override
    public List<Contract> selectContractList(Contract contract)
    {
        return contractMapper.selectContractList(contract);
    }

    /**
     * 新增合同信息
     * 
     * @param contract 合同信息
     * @return 结果
     */
    @Override
    public int insertContract(Contract contract)
    {
        // 设置当前录入人
        contract.setInputUser(SecurityUtils.getUserId());
        // 设置当前时间
        contract.setInputTime(DateUtils.getNowDate());
        contract.setAuditState(AuditConstants.CONTRACT_STATUS_UNAUDIT);
        // 是否盖章确认 0 否 1 是
        contract.setAffixSealState(0);
        // 是否作废 -1 作废 0 在用
        contract.setNullifyState(0);
        return contractMapper.insertContract(contract);
    }

    /**
     * 修改合同信息
     * 
     * @param contract 合同信息
     * @return 结果
     */
    @Override
    public int updateContract(Contract contract)
    {
        int status = contract.getAuditState();
        Assert.state(status == AuditConstants.CONTRACT_STATUS_UNAUDIT
                ,"只有未审核的合同可以修改");
        return contractMapper.updateContract(contract);
    }

    /**
     * 批量删除合同信息
     * 
     * @param ids 需要删除的合同信息主键
     * @return 结果
     */
    @Override
    public int deleteContractByIds(Long[] ids)
    {
        return contractMapper.deleteContractByIds(ids);
    }

    /**
     * 删除合同信息信息
     * 
     * @param id 合同信息主键
     * @return 结果
     */
    @Override
    public int deleteContractById(Long id)
    {
        return contractMapper.deleteContractById(id);
    }

    @Override
    public List<Contract> selectContractDTOList(ContractDTO contractDTO) {

        return contractMapper.selectContractDTOList(contractDTO);
    }
}
